package com.niuwa.p2p.dao.business;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.niuwa.p2p.dao.MyBatisDao;
import com.niuwa.p2p.entity.business.LoanClaim;
import com.niuwa.p2p.vo.business.LoanClaimOriginVo;
import com.niuwa.p2p.vo.business.LoanClaimVo;

@MyBatisDao
public interface LoanClaimDao {
	
	/**
	 * 根据主键项目编号查询项目
	 * @param projectNo
	 * @return
	 */
	public LoanClaim selectByPrimaryKey(String projectNo);
	
	/**
	 * 根据项目编号修改项目发布状态
	 * @param paramMap
	 */
	public void updateLoanClaimStatus(Map<String,Object> paramMap);
	
	
	/**
	 * 根据项目编号修改项目发布状态和项目去向
	 * @param map-> projectNo 项目编号
	 * @param map-> releaseStatusOld 项目状态（更新前）
	 * @param map-> releaseStatusNew 项目状态（更新后）
	 * @param map-> projectToNew 项目去向（更新后）
	 */
	public int updateReleaseStatusAndProjectTo(Map<String,Object> paramMap);
	
	public int updateByPrimaryKeySelectiveByVersion(LoanClaim loanClaim);
	
	public int updateByPrimaryKeySelective(LoanClaim loanClaim);
	
	/**
	 * 统计借款债权个数
	 * 根据paramMap，统计出需要的借款债数
	 * 例：适用于分页的时候，选取当前页的借款债条数
	 * 
	 * @param paramMap 过滤得条件Map
	 * @return 总客户数
	 */
	public int count(Map<String, Object> paramMap);
	
	
	/**
	 * 选取借款债集合
	 * 根据paramMap，选取需要的借款债集合
	 * 例：适用于分页的时候，选取当前页的借款债集合
	 * 
	 * @param paramMap 过滤得条件Map
	 * @return List<User> 客户集合 
	 */
	public List<LoanClaimVo> selectLoanClaimBySelective(Map<String, Object> paramMap);
	
	
	/**
	 * 通过借款债权项目编号 选取单个借款债权详情  
	 * 
	 * @param  projectNo 项目编号 
	 * @return LoanClaimOriginVo 借款债权详情
	 * @throws Exception
	 */
	public LoanClaimOriginVo selectClaimLoanDetailByProjectNo(String projectNo);
	
	
	/**
	 * 取得待匹配债权
	 * 
	 * @return 待匹配债权
	 */
	public BigDecimal selectToAssignClaimAmout();
	
	/**
	 * 取得待匹配借款
	 * 
	 * @return 待匹配借款
	 */
	public BigDecimal selectToAssignLoanAmout();
	
	
	/**
	 * 根据投资计划产品编号获取债权列表
	 * @param prodCode 产品编号
	 * @return
	 */
	public List<LoanClaimOriginVo> getClaimListByProdCode(String prodCode);
	
	/**
	 * 新增一个借款债权项目
	 * @param loanClaimDao
	 * @return
	 */
	public int insertOneLoanClaim4App(LoanClaim loanClaimDao);
	
	/**
	 * 获取借款列表
	 * @param loanClaimDao
	 * @return
	 */
	public List<Map<String, Object>> getLoanList4App(HashMap<String, Object> daoParams);
	
	/**
	 * 更新审批状态
	 * @param loanClaimDao
	 * @return
	 */
	public int updateStatus4app(LoanClaim loanClaimDao);
	
	/**
	 * 新增借款
	 * @param loanClaim
	 * @return
	 */
	public int insertLoanClaim(LoanClaim loanClaim);
}
